home *** CD-ROM | disk | FTP | other *** search
- package sun.print;
-
- import java.io.File;
- import java.net.URI;
- import java.net.URISyntaxException;
- import java.util.ArrayList;
- import java.util.Locale;
- import javax.print.DocFlavor;
- import javax.print.DocPrintJob;
- import javax.print.PrintService;
- import javax.print.ServiceUIFactory;
- import javax.print.DocFlavor.BYTE_ARRAY;
- import javax.print.DocFlavor.INPUT_STREAM;
- import javax.print.DocFlavor.SERVICE_FORMATTED;
- import javax.print.DocFlavor.URL;
- import javax.print.attribute.Attribute;
- import javax.print.attribute.AttributeSet;
- import javax.print.attribute.AttributeSetUtilities;
- import javax.print.attribute.HashAttributeSet;
- import javax.print.attribute.HashPrintServiceAttributeSet;
- import javax.print.attribute.PrintServiceAttribute;
- import javax.print.attribute.PrintServiceAttributeSet;
- import javax.print.attribute.standard.Chromaticity;
- import javax.print.attribute.standard.ColorSupported;
- import javax.print.attribute.standard.Copies;
- import javax.print.attribute.standard.CopiesSupported;
- import javax.print.attribute.standard.Destination;
- import javax.print.attribute.standard.Fidelity;
- import javax.print.attribute.standard.JobName;
- import javax.print.attribute.standard.Media;
- import javax.print.attribute.standard.MediaPrintableArea;
- import javax.print.attribute.standard.MediaSize;
- import javax.print.attribute.standard.MediaSizeName;
- import javax.print.attribute.standard.MediaTray;
- import javax.print.attribute.standard.OrientationRequested;
- import javax.print.attribute.standard.PageRanges;
- import javax.print.attribute.standard.PrintQuality;
- import javax.print.attribute.standard.PrinterIsAcceptingJobs;
- import javax.print.attribute.standard.PrinterName;
- import javax.print.attribute.standard.PrinterResolution;
- import javax.print.attribute.standard.PrinterState;
- import javax.print.attribute.standard.PrinterStateReason;
- import javax.print.attribute.standard.PrinterStateReasons;
- import javax.print.attribute.standard.QueuedJobCount;
- import javax.print.attribute.standard.RequestingUserName;
- import javax.print.attribute.standard.Severity;
- import javax.print.attribute.standard.SheetCollate;
- import javax.print.attribute.standard.Sides;
- import javax.print.event.PrintServiceAttributeListener;
- import sun.awt.windows.WPrinterJob;
-
- public class Win32PrintService implements PrintService, AttributeUpdater, SunPrinterJobService {
- public static MediaSize[] predefMedia;
- private static final DocFlavor[] supportedFlavors;
- private static final Class[] serviceAttrCats;
- private static Class[] otherAttrCats;
- public static final MediaSizeName[] dmPaperToPrintService;
- private static final MediaTray[] dmPaperBinToPrintService;
- private static int DM_PAPERSIZE;
- private static int DM_PRINTQUALITY;
- private static int DM_YRESOLUTION;
- private static final int DMRES_MEDIUM = -3;
- private static final int DMRES_HIGH = -4;
- private static final int DMORIENT_LANDSCAPE = 2;
- private static final int DMDUP_VERTICAL = 2;
- private static final int DMDUP_HORIZONTAL = 3;
- private static final int DMCOLLATE_TRUE = 1;
- private static final int DMPAPER_A2 = 66;
- private static final int DMPAPER_A6 = 70;
- private static final int DMPAPER_B6_JIS = 88;
- private static final int DEVCAP_COLOR = 1;
- private static final int DEVCAP_DUPLEX = 2;
- private static final int DEVCAP_COLLATE = 4;
- private static final int DEVCAP_QUALITY = 8;
- private static final int DEVCAP_POSTSCRIPT = 16;
- private String printer;
- private PrinterName name;
- private String port;
- private transient PrintServiceAttributeSet lastSet;
- private transient ServiceNotifier notifier = null;
- private MediaSizeName[] mediaSizeNames;
- private MediaPrintableArea[] mediaPrintables;
- private MediaTray[] mediaTrays;
- private PrinterResolution[] printRes;
- private int nCopies;
- private int prnCaps;
- private int[] defaultSettings;
- private boolean gotTrays;
- private boolean gotCopies;
- private boolean mediaInitialized;
- private ArrayList idList;
- private MediaSize[] mediaSizes;
- private boolean isInvalid;
-
- Win32PrintService(String var1) {
- if (var1 == null) {
- throw new IllegalArgumentException("null printer name");
- } else {
- this.printer = var1;
- this.mediaInitialized = false;
- this.gotTrays = false;
- this.gotCopies = false;
- this.isInvalid = false;
- this.printRes = null;
- this.prnCaps = 0;
- this.defaultSettings = null;
- this.port = null;
- }
- }
-
- public void invalidateService() {
- this.isInvalid = true;
- }
-
- public String getName() {
- return this.printer;
- }
-
- private PrinterName getPrinterName() {
- if (this.name == null) {
- this.name = new PrinterName(this.printer, (Locale)null);
- }
-
- return this.name;
- }
-
- public MediaSizeName findWin32Media(int var1) {
- if (var1 >= 1 && var1 <= dmPaperToPrintService.length) {
- switch (var1) {
- case 66:
- return MediaSizeName.ISO_A2;
- case 70:
- return MediaSizeName.ISO_A6;
- case 88:
- return MediaSizeName.JIS_B6;
- default:
- return dmPaperToPrintService[var1 - 1];
- }
- } else {
- return null;
- }
- }
-
- private boolean addToUniqueList(ArrayList var1, MediaSizeName var2) {
- for(int var4 = 0; var4 < var1.size(); ++var4) {
- MediaSizeName var3 = (MediaSizeName)var1.get(var4);
- if (var3 == var2) {
- return false;
- }
- }
-
- var1.add(var2);
- return true;
- }
-
- private synchronized void initMedia() {
- if (!this.mediaInitialized) {
- this.mediaInitialized = true;
- int[] var1 = this.getAllMediaIDs(this.printer, this.getPort());
- if (var1 != null) {
- ArrayList var2 = new ArrayList();
- ArrayList var3 = new ArrayList();
- boolean var6 = false;
- this.idList = new ArrayList();
-
- for(int var8 = 0; var8 < var1.length; ++var8) {
- this.idList.add(new Integer(var1[var8]));
- }
-
- this.mediaSizes = this.getMediaSizes(this.idList, var1);
-
- for(int var11 = 0; var11 < this.idList.size(); ++var11) {
- MediaSizeName var4 = this.findWin32Media((Integer)this.idList.get(var11));
- if (var4 == null && this.idList.size() == this.mediaSizes.length) {
- var4 = this.mediaSizes[var11].getMediaSizeName();
- }
-
- if (var4 != null) {
- boolean var5 = this.addToUniqueList(var2, var4);
- if (var5 && !var6) {
- float[] var7 = this.getMediaPrintableArea(this.printer, (Integer)this.idList.get(var11));
- if (var7 != null) {
- try {
- MediaPrintableArea var9 = new MediaPrintableArea(var7[0], var7[1], var7[2], var7[3], 25400);
- var3.add(var9);
- } catch (IllegalArgumentException var10) {
- }
- } else if (var11 == 0) {
- var6 = true;
- }
- }
- }
- }
-
- this.mediaSizeNames = new MediaSizeName[var2.size()];
- var2.toArray(this.mediaSizeNames);
- this.mediaPrintables = new MediaPrintableArea[var3.size()];
- var3.toArray(this.mediaPrintables);
- }
- }
- }
-
- private synchronized MediaTray[] getMediaTrays() {
- if (this.gotTrays) {
- return this.mediaTrays;
- } else {
- this.gotTrays = true;
- String var1 = this.getPort();
- int[] var2 = this.getAllMediaTrays(this.printer, var1);
- String[] var3 = this.getAllMediaTrayNames(this.printer, var1);
- if (var2 != null && var3 != null) {
- int var4 = 0;
-
- for(int var5 = 0; var5 < var2.length; ++var5) {
- if (var2[var5] > 0) {
- ++var4;
- }
- }
-
- MediaTray[] var9 = new MediaTray[var4];
- int var7 = 0;
-
- for(int var8 = 0; var7 < var2.length; ++var7) {
- int var6 = var2[var7];
- if (var6 > 0) {
- if (var6 <= dmPaperBinToPrintService.length && dmPaperBinToPrintService[var6 - 1] != null) {
- var9[var8++] = dmPaperBinToPrintService[var6 - 1];
- } else {
- var9[var8++] = new Win32MediaTray(var6, var3[var7]);
- }
- }
- }
-
- return var9;
- } else {
- return null;
- }
- }
- }
-
- private boolean isSameSize(float var1, float var2, float var3, float var4) {
- float var5 = var1 - var3;
- float var6 = var2 - var4;
- float var7 = var1 - var4;
- float var8 = var2 - var3;
- return Math.abs(var5) <= 1.0F && Math.abs(var6) <= 1.0F || Math.abs(var7) <= 1.0F && Math.abs(var8) <= 1.0F;
- }
-
- public MediaSizeName findMatchingMediaSizeNameMM(float var1, float var2) {
- if (predefMedia != null) {
- for(int var3 = 0; var3 < predefMedia.length; ++var3) {
- if (predefMedia[var3] != null && this.isSameSize(predefMedia[var3].getX(1000), predefMedia[var3].getY(1000), var1, var2)) {
- return predefMedia[var3].getMediaSizeName();
- }
- }
- }
-
- return null;
- }
-
- private MediaSize[] getMediaSizes(ArrayList var1, int[] var2) {
- String var3 = this.getPort();
- int[] var4 = this.getAllMediaSizes(this.printer, var3);
- String[] var5 = this.getAllMediaNames(this.printer, var3);
- Object var6 = null;
- MediaSize var7 = null;
- if (var4 != null && var5 != null) {
- int var10 = var4.length / 2;
- ArrayList var11 = new ArrayList();
-
- for(int var12 = 0; var12 < var10; var7 = null) {
- float var8 = (float)(var4[var12 * 2] / 10);
- float var9 = (float)(var4[var12 * 2 + 1] / 10);
- if (!(var8 <= 0.0F) && !(var9 <= 0.0F)) {
- MediaSizeName var17 = this.findMatchingMediaSizeNameMM(var8, var9);
- if (var17 != null) {
- var7 = MediaSize.getMediaSizeForName(var17);
- }
-
- if (var7 != null) {
- var11.add(var7);
- } else {
- Win32MediaSize var20 = new Win32MediaSize(var5[var12]);
-
- try {
- var7 = new MediaSize(var8, var9, 1000, var20);
- var11.add(var7);
- } catch (IllegalArgumentException var16) {
- if (var10 == var2.length) {
- Integer var15 = new Integer(var2[var12]);
- var1.remove(var1.indexOf(var15));
- }
- }
- }
- } else if (var10 == var2.length) {
- Integer var13 = new Integer(var2[var12]);
- var1.remove(var1.indexOf(var13));
- }
-
- ++var12;
- }
-
- MediaSize[] var19 = new MediaSize[var11.size()];
- var11.toArray(var19);
- return var19;
- } else {
- return null;
- }
- }
-
- private PrinterIsAcceptingJobs getPrinterIsAcceptingJobs() {
- return this.getJobStatus(this.printer, 2) != 1 ? PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS : PrinterIsAcceptingJobs.ACCEPTING_JOBS;
- }
-
- private PrinterState getPrinterState() {
- return this.isInvalid ? PrinterState.STOPPED : null;
- }
-
- private PrinterStateReasons getPrinterStateReasons() {
- if (this.isInvalid) {
- PrinterStateReasons var1 = new PrinterStateReasons();
- var1.put(PrinterStateReason.SHUTDOWN, Severity.ERROR);
- return var1;
- } else {
- return null;
- }
- }
-
- private QueuedJobCount getQueuedJobCount() {
- int var1 = this.getJobStatus(this.printer, 1);
- return var1 != -1 ? new QueuedJobCount(var1) : new QueuedJobCount(0);
- }
-
- private boolean isSupportedCopies(Copies var1) {
- synchronized(this) {
- if (!this.gotCopies) {
- this.nCopies = this.getCopiesSupported(this.printer, this.getPort());
- this.gotCopies = true;
- }
- }
-
- int var2 = var1.getValue();
- return var2 > 0 && var2 <= this.nCopies;
- }
-
- private boolean isSupportedMedia(MediaSizeName var1) {
- this.initMedia();
- if (this.mediaSizeNames != null) {
- for(int var2 = 0; var2 < this.mediaSizeNames.length; ++var2) {
- if (var1.equals(this.mediaSizeNames[var2])) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- private boolean isSupportedMediaPrintableArea(MediaPrintableArea var1) {
- this.initMedia();
- if (this.mediaPrintables != null) {
- for(int var2 = 0; var2 < this.mediaPrintables.length; ++var2) {
- if (var1.equals(this.mediaPrintables[var2])) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- private boolean isSupportedMediaTray(MediaTray var1) {
- this.mediaTrays = this.getMediaTrays();
- if (this.mediaTrays != null) {
- for(int var2 = 0; var2 < this.mediaTrays.length; ++var2) {
- if (var1.equals(this.mediaTrays[var2])) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- private int getPrinterCapabilities() {
- if (this.prnCaps == 0) {
- this.prnCaps = this.getCapabilities(this.printer, this.getPort());
- }
-
- return this.prnCaps;
- }
-
- private String getPort() {
- if (this.port == null) {
- this.port = this.getPrinterPort(this.printer);
- }
-
- return this.port;
- }
-
- private int[] getDefaultPrinterSettings() {
- if (this.defaultSettings == null) {
- this.defaultSettings = this.getDefaultSettings(this.printer);
- }
-
- return this.defaultSettings;
- }
-
- private PrinterResolution[] getPrintResolutions() {
- if (this.printRes == null) {
- int[] var1 = this.getAllResolutions(this.printer, this.getPort());
- if (var1 == null) {
- this.printRes = new PrinterResolution[0];
- } else {
- int var2 = var1.length / 2;
- ArrayList var3 = new ArrayList();
-
- for(int var5 = 0; var5 < var2; ++var5) {
- try {
- PrinterResolution var4 = new PrinterResolution(var1[var5 * 2], var1[var5 * 2 + 1], 100);
- var3.add(var4);
- } catch (IllegalArgumentException var7) {
- }
- }
-
- this.printRes = (PrinterResolution[])var3.toArray(new PrinterResolution[var3.size()]);
- }
- }
-
- return this.printRes;
- }
-
- private boolean isSupportedResolution(PrinterResolution var1) {
- PrinterResolution[] var2 = this.getPrintResolutions();
- if (var2 != null) {
- for(int var3 = 0; var3 < var2.length; ++var3) {
- if (var1.equals(var2[var3])) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- public DocPrintJob createPrintJob() {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- var1.checkPrintJobAccess();
- }
-
- return new Win32PrintJob(this);
- }
-
- private PrintServiceAttributeSet getDynamicAttributes() {
- HashPrintServiceAttributeSet var1 = new HashPrintServiceAttributeSet();
- var1.add(this.getPrinterIsAcceptingJobs());
- var1.add(this.getQueuedJobCount());
- return var1;
- }
-
- public PrintServiceAttributeSet getUpdatedAttributes() {
- PrintServiceAttributeSet var1 = this.getDynamicAttributes();
- if (this.lastSet == null) {
- this.lastSet = var1;
- return AttributeSetUtilities.unmodifiableView(var1);
- } else {
- HashPrintServiceAttributeSet var2 = new HashPrintServiceAttributeSet();
- Attribute[] var3 = var1.toArray();
-
- for(int var4 = 0; var4 < var3.length; ++var4) {
- Attribute var5 = var3[var4];
- if (!this.lastSet.containsValue(var5)) {
- var2.add(var5);
- }
- }
-
- this.lastSet = var1;
- return AttributeSetUtilities.unmodifiableView(var2);
- }
- }
-
- public void wakeNotifier() {
- synchronized(this) {
- if (this.notifier != null) {
- this.notifier.wake();
- }
-
- }
- }
-
- public void addPrintServiceAttributeListener(PrintServiceAttributeListener var1) {
- synchronized(this) {
- if (var1 != null) {
- if (this.notifier == null) {
- this.notifier = new ServiceNotifier(this);
- }
-
- this.notifier.addListener(var1);
- }
- }
- }
-
- public void removePrintServiceAttributeListener(PrintServiceAttributeListener var1) {
- synchronized(this) {
- if (var1 != null && this.notifier != null) {
- this.notifier.removeListener(var1);
- if (this.notifier.isEmpty()) {
- this.notifier.stopNotifier();
- this.notifier = null;
- }
-
- }
- }
- }
-
- public <T extends PrintServiceAttribute> T getAttribute(Class<T> var1) {
- if (var1 == null) {
- throw new NullPointerException("category");
- } else if (!PrintServiceAttribute.class.isAssignableFrom(var1)) {
- throw new IllegalArgumentException("Not a PrintServiceAttribute");
- } else if (var1 == ColorSupported.class) {
- int var2 = this.getPrinterCapabilities();
- return (T)((var2 & 1) != 0 ? ColorSupported.SUPPORTED : ColorSupported.NOT_SUPPORTED);
- } else if (var1 == PrinterName.class) {
- return (T)this.getPrinterName();
- } else if (var1 == PrinterState.class) {
- return (T)this.getPrinterState();
- } else if (var1 == PrinterStateReasons.class) {
- return (T)this.getPrinterStateReasons();
- } else if (var1 == QueuedJobCount.class) {
- return (T)this.getQueuedJobCount();
- } else {
- return (T)(var1 == PrinterIsAcceptingJobs.class ? this.getPrinterIsAcceptingJobs() : null);
- }
- }
-
- public PrintServiceAttributeSet getAttributes() {
- HashPrintServiceAttributeSet var1 = new HashPrintServiceAttributeSet();
- var1.add(this.getPrinterName());
- var1.add(this.getPrinterIsAcceptingJobs());
- PrinterState var2 = this.getPrinterState();
- if (var2 != null) {
- var1.add(var2);
- }
-
- PrinterStateReasons var3 = this.getPrinterStateReasons();
- if (var3 != null) {
- var1.add(var3);
- }
-
- var1.add(this.getQueuedJobCount());
- int var4 = this.getPrinterCapabilities();
- if ((var4 & 1) != 0) {
- var1.add(ColorSupported.SUPPORTED);
- } else {
- var1.add(ColorSupported.NOT_SUPPORTED);
- }
-
- return AttributeSetUtilities.unmodifiableView(var1);
- }
-
- public DocFlavor[] getSupportedDocFlavors() {
- int var1 = supportedFlavors.length;
- int var3 = this.getPrinterCapabilities();
- DocFlavor[] var2;
- if ((var3 & 16) != 0) {
- var2 = new DocFlavor[var1 + 3];
- System.arraycopy(supportedFlavors, 0, var2, 0, var1);
- var2[var1] = BYTE_ARRAY.POSTSCRIPT;
- var2[var1 + 1] = INPUT_STREAM.POSTSCRIPT;
- var2[var1 + 2] = URL.POSTSCRIPT;
- } else {
- var2 = new DocFlavor[var1];
- System.arraycopy(supportedFlavors, 0, var2, 0, var1);
- }
-
- return var2;
- }
-
- public boolean isDocFlavorSupported(DocFlavor var1) {
- DocFlavor[] var2 = this.getSupportedDocFlavors();
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- if (var1.equals(var2[var3])) {
- return true;
- }
- }
-
- return false;
- }
-
- public Class<?>[] getSupportedAttributeCategories() {
- ArrayList var1 = new ArrayList(otherAttrCats.length + 3);
-
- for(int var2 = 0; var2 < otherAttrCats.length; ++var2) {
- var1.add(otherAttrCats[var2]);
- }
-
- int var4 = this.getPrinterCapabilities();
- if ((var4 & 2) != 0) {
- var1.add(Sides.class);
- }
-
- if ((var4 & 8) != 0) {
- int[] var3 = this.getDefaultPrinterSettings();
- if (var3[3] >= -4 && var3[3] < 0) {
- var1.add(PrintQuality.class);
- }
- }
-
- PrinterResolution[] var5 = this.getPrintResolutions();
- if (var5 != null && var5.length > 0) {
- var1.add(PrinterResolution.class);
- }
-
- return (Class[])var1.toArray(new Class[var1.size()]);
- }
-
- public boolean isAttributeCategorySupported(Class<? extends Attribute> var1) {
- if (var1 == null) {
- throw new NullPointerException("null category");
- } else if (!Attribute.class.isAssignableFrom(var1)) {
- throw new IllegalArgumentException(var1 + " is not an Attribute");
- } else {
- Class[] var2 = this.getSupportedAttributeCategories();
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- if (var1.equals(var2[var3])) {
- return true;
- }
- }
-
- return false;
- }
- }
-
- public Object getDefaultAttributeValue(Class<? extends Attribute> var1) {
- if (var1 == null) {
- throw new NullPointerException("null category");
- } else if (!Attribute.class.isAssignableFrom(var1)) {
- throw new IllegalArgumentException(var1 + " is not an Attribute");
- } else if (!this.isAttributeCategorySupported(var1)) {
- return null;
- } else {
- int[] var2 = this.getDefaultPrinterSettings();
- int var3 = var2[0];
- int var4 = var2[2];
- int var5 = var2[3];
- int var6 = var2[4];
- int var7 = var2[5];
- int var8 = var2[6];
- int var9 = var2[7];
- if (var1 == Copies.class) {
- return var6 > 0 ? new Copies(var6) : new Copies(1);
- } else if (var1 == Chromaticity.class) {
- int var20 = this.getPrinterCapabilities();
- return (var20 & 1) == 0 ? Chromaticity.MONOCHROME : Chromaticity.COLOR;
- } else if (var1 == JobName.class) {
- return new JobName("Java Printing", (Locale)null);
- } else if (var1 == OrientationRequested.class) {
- return var7 == 2 ? OrientationRequested.LANDSCAPE : OrientationRequested.PORTRAIT;
- } else if (var1 == PageRanges.class) {
- return new PageRanges(1, Integer.MAX_VALUE);
- } else {
- if (var1 == Media.class) {
- MediaSizeName var10 = this.findWin32Media(var3);
- if (var10 != null) {
- return var10;
- }
-
- this.initMedia();
- if (this.mediaSizeNames != null && this.mediaSizeNames.length > 0) {
- if (this.idList != null && this.mediaSizes != null && this.idList.size() == this.mediaSizes.length) {
- Integer var11 = new Integer(var3);
- int var12 = this.idList.indexOf(var11);
- if (var12 >= 0 && var12 < this.mediaSizes.length) {
- return this.mediaSizes[var12].getMediaSizeName();
- }
- }
-
- return this.mediaSizeNames[0];
- }
- } else {
- if (var1 == MediaPrintableArea.class) {
- float[] var19 = this.getMediaPrintableArea(this.printer, var3);
- if (var19 != null) {
- MediaPrintableArea var21 = null;
-
- try {
- var21 = new MediaPrintableArea(var19[0], var19[1], var19[2], var19[3], 25400);
- } catch (IllegalArgumentException var14) {
- }
-
- return var21;
- }
-
- return null;
- }
-
- if (var1 == SunAlternateMedia.class) {
- return null;
- }
-
- if (var1 == Destination.class) {
- try {
- return new Destination((new File("out.prn")).toURI());
- } catch (SecurityException var15) {
- try {
- return new Destination(new URI("file:out.prn"));
- } catch (URISyntaxException var13) {
- return null;
- }
- }
- }
-
- if (var1 == Sides.class) {
- switch (var8) {
- case 2:
- return Sides.TWO_SIDED_LONG_EDGE;
- case 3:
- return Sides.TWO_SIDED_SHORT_EDGE;
- default:
- return Sides.ONE_SIDED;
- }
- }
-
- if (var1 == PrinterResolution.class) {
- if (var5 >= 0 && var4 >= 0) {
- return new PrinterResolution(var5, var4, 100);
- }
-
- int var22 = var4 > var5 ? var4 : var5;
- if (var22 > 0) {
- return new PrinterResolution(var22, var22, 100);
- }
- } else {
- if (var1 == ColorSupported.class) {
- int var18 = this.getPrinterCapabilities();
- if ((var18 & 1) != 0) {
- return ColorSupported.SUPPORTED;
- }
-
- return ColorSupported.NOT_SUPPORTED;
- }
-
- if (var1 == PrintQuality.class) {
- if (var5 < 0 && var5 >= -4) {
- switch (var5) {
- case -4:
- return PrintQuality.HIGH;
- case -3:
- return PrintQuality.NORMAL;
- default:
- return PrintQuality.DRAFT;
- }
- }
- } else {
- if (var1 == RequestingUserName.class) {
- String var17 = "";
-
- try {
- var17 = System.getProperty("user.name", "");
- } catch (SecurityException var16) {
- }
-
- return new RequestingUserName(var17, (Locale)null);
- }
-
- if (var1 == SheetCollate.class) {
- if (var9 == 1) {
- return SheetCollate.COLLATED;
- }
-
- return SheetCollate.UNCOLLATED;
- }
-
- if (var1 == Fidelity.class) {
- return Fidelity.FIDELITY_FALSE;
- }
- }
- }
- }
-
- return null;
- }
- }
- }
-
- private boolean isPostScriptFlavor(DocFlavor var1) {
- return var1.equals(BYTE_ARRAY.POSTSCRIPT) || var1.equals(INPUT_STREAM.POSTSCRIPT) || var1.equals(URL.POSTSCRIPT);
- }
-
- private boolean isPSDocAttr(Class var1) {
- return var1 == OrientationRequested.class || var1 == Copies.class;
- }
-
- private boolean isAutoSense(DocFlavor var1) {
- return var1.equals(BYTE_ARRAY.AUTOSENSE) || var1.equals(INPUT_STREAM.AUTOSENSE) || var1.equals(URL.AUTOSENSE);
- }
-
- public Object getSupportedAttributeValues(Class<? extends Attribute> var1, DocFlavor var2, AttributeSet var3) {
- if (var1 == null) {
- throw new NullPointerException("null category");
- } else if (!Attribute.class.isAssignableFrom(var1)) {
- throw new IllegalArgumentException(var1 + " does not implement Attribute");
- } else {
- if (var2 != null) {
- if (!this.isDocFlavorSupported(var2)) {
- throw new IllegalArgumentException(var2 + " is an unsupported flavor");
- }
-
- if (this.isAutoSense(var2) || this.isPostScriptFlavor(var2) && this.isPSDocAttr(var1)) {
- return null;
- }
- }
-
- if (!this.isAttributeCategorySupported(var1)) {
- return null;
- } else if (var1 == JobName.class) {
- return new JobName("Java Printing", (Locale)null);
- } else if (var1 == RequestingUserName.class) {
- String var22 = "";
-
- try {
- var22 = System.getProperty("user.name", "");
- } catch (SecurityException var8) {
- }
-
- return new RequestingUserName(var22, (Locale)null);
- } else if (var1 == ColorSupported.class) {
- int var21 = this.getPrinterCapabilities();
- if ((var21 & 1) != 0) {
- return ColorSupported.SUPPORTED;
- } else {
- return ColorSupported.NOT_SUPPORTED;
- }
- } else if (var1 == Chromaticity.class) {
- if (var2 != null && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE) && !var2.equals(BYTE_ARRAY.GIF) && !var2.equals(INPUT_STREAM.GIF) && !var2.equals(URL.GIF) && !var2.equals(BYTE_ARRAY.JPEG) && !var2.equals(INPUT_STREAM.JPEG) && !var2.equals(URL.JPEG) && !var2.equals(BYTE_ARRAY.PNG) && !var2.equals(INPUT_STREAM.PNG) && !var2.equals(URL.PNG)) {
- return null;
- } else {
- int var20 = this.getPrinterCapabilities();
- if ((var20 & 1) == 0) {
- Chromaticity[] var28 = new Chromaticity[]{Chromaticity.MONOCHROME};
- return var28;
- } else {
- Chromaticity[] var27 = new Chromaticity[]{Chromaticity.MONOCHROME, Chromaticity.COLOR};
- return var27;
- }
- }
- } else if (var1 == Destination.class) {
- try {
- return new Destination((new File("out.prn")).toURI());
- } catch (SecurityException var9) {
- try {
- return new Destination(new URI("file:out.prn"));
- } catch (URISyntaxException var7) {
- return null;
- }
- }
- } else if (var1 == OrientationRequested.class) {
- if (var2 != null && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE) && !var2.equals(INPUT_STREAM.GIF) && !var2.equals(INPUT_STREAM.JPEG) && !var2.equals(INPUT_STREAM.PNG) && !var2.equals(BYTE_ARRAY.GIF) && !var2.equals(BYTE_ARRAY.JPEG) && !var2.equals(BYTE_ARRAY.PNG) && !var2.equals(URL.GIF) && !var2.equals(URL.JPEG) && !var2.equals(URL.PNG)) {
- return null;
- } else {
- OrientationRequested[] var19 = new OrientationRequested[]{OrientationRequested.PORTRAIT, OrientationRequested.LANDSCAPE, OrientationRequested.REVERSE_LANDSCAPE};
- return var19;
- }
- } else if (var1 != Copies.class && var1 != CopiesSupported.class) {
- if (var1 == Media.class) {
- this.initMedia();
- int var17 = this.mediaSizeNames == null ? 0 : this.mediaSizeNames.length;
- this.mediaTrays = this.getMediaTrays();
- var17 += this.mediaTrays == null ? 0 : this.mediaTrays.length;
- Media[] var26 = new Media[var17];
- if (this.mediaSizeNames != null) {
- System.arraycopy(this.mediaSizeNames, 0, var26, 0, this.mediaSizeNames.length);
- }
-
- if (this.mediaTrays != null) {
- System.arraycopy(this.mediaTrays, 0, var26, this.mediaSizeNames.length, this.mediaTrays.length);
- }
-
- return var26;
- } else if (var1 == MediaPrintableArea.class) {
- this.initMedia();
- if (this.mediaPrintables == null) {
- return null;
- } else {
- Media var16;
- if (var3 != null && (var16 = (Media)var3.get(Media.class)) != null && var16 instanceof MediaSizeName) {
- MediaPrintableArea[] var25 = new MediaPrintableArea[1];
- if (this.mediaSizeNames.length == this.mediaPrintables.length) {
- for(int var6 = 0; var6 < this.mediaSizeNames.length; ++var6) {
- if (var16.equals(this.mediaSizeNames[var6])) {
- var25[0] = this.mediaPrintables[var6];
- return var25;
- }
- }
- }
-
- MediaSize var29 = MediaSize.getMediaSizeForName((MediaSizeName)var16);
- if (var29 != null) {
- var25[0] = new MediaPrintableArea(0.0F, 0.0F, var29.getX(25400), var29.getY(25400), 25400);
- return var25;
- } else {
- return null;
- }
- } else {
- MediaPrintableArea[] var24 = new MediaPrintableArea[this.mediaPrintables.length];
- System.arraycopy(this.mediaPrintables, 0, var24, 0, this.mediaPrintables.length);
- return var24;
- }
- }
- } else if (var1 == SunAlternateMedia.class) {
- return new SunAlternateMedia((Media)this.getDefaultAttributeValue(Media.class));
- } else if (var1 == PageRanges.class) {
- if (var2 != null && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE)) {
- return null;
- } else {
- PageRanges[] var15 = new PageRanges[]{new PageRanges(1, Integer.MAX_VALUE)};
- return var15;
- }
- } else if (var1 == PrinterResolution.class) {
- PrinterResolution[] var14 = this.getPrintResolutions();
- if (var14 == null) {
- return null;
- } else {
- PrinterResolution[] var23 = new PrinterResolution[var14.length];
- System.arraycopy(var14, 0, var23, 0, var14.length);
- return var23;
- }
- } else if (var1 == Sides.class) {
- if (var2 != null && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE)) {
- return null;
- } else {
- Sides[] var13 = new Sides[]{Sides.ONE_SIDED, Sides.TWO_SIDED_LONG_EDGE, Sides.TWO_SIDED_SHORT_EDGE};
- return var13;
- }
- } else if (var1 == PrintQuality.class) {
- PrintQuality[] var12 = new PrintQuality[]{PrintQuality.DRAFT, PrintQuality.HIGH, PrintQuality.NORMAL};
- return var12;
- } else if (var1 != SheetCollate.class) {
- if (var1 == Fidelity.class) {
- Fidelity[] var11 = new Fidelity[]{Fidelity.FIDELITY_FALSE, Fidelity.FIDELITY_TRUE};
- return var11;
- } else {
- return null;
- }
- } else {
- int var4 = this.getPrinterCapabilities();
- if (((this.prnCaps & 4) == 0 || var2 != null) && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE)) {
- return null;
- } else {
- SheetCollate[] var5 = new SheetCollate[]{SheetCollate.COLLATED, SheetCollate.UNCOLLATED};
- return var5;
- }
- }
- } else {
- synchronized(this) {
- if (!this.gotCopies) {
- this.nCopies = this.getCopiesSupported(this.printer, this.getPort());
- this.gotCopies = true;
- }
- }
-
- return new CopiesSupported(1, this.nCopies);
- }
- }
- }
-
- public boolean isAttributeValueSupported(Attribute var1, DocFlavor var2, AttributeSet var3) {
- if (var1 == null) {
- throw new NullPointerException("null attribute");
- } else {
- Class var4 = var1.getCategory();
- if (var2 != null) {
- if (!this.isDocFlavorSupported(var2)) {
- throw new IllegalArgumentException(var2 + " is an unsupported flavor");
- }
-
- if (this.isAutoSense(var2) || this.isPostScriptFlavor(var2) && this.isPSDocAttr(var4)) {
- return false;
- }
- }
-
- if (!this.isAttributeCategorySupported(var4)) {
- return false;
- } else if (var1.getCategory() == Chromaticity.class) {
- if (var2 != null && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE) && !var2.equals(BYTE_ARRAY.GIF) && !var2.equals(INPUT_STREAM.GIF) && !var2.equals(URL.GIF) && !var2.equals(BYTE_ARRAY.JPEG) && !var2.equals(INPUT_STREAM.JPEG) && !var2.equals(URL.JPEG) && !var2.equals(BYTE_ARRAY.PNG) && !var2.equals(INPUT_STREAM.PNG) && !var2.equals(URL.PNG)) {
- return false;
- } else {
- int var10 = this.getPrinterCapabilities();
- if ((var10 & 1) != 0) {
- return true;
- } else {
- return var1 == Chromaticity.MONOCHROME;
- }
- }
- } else if (var1.getCategory() == Copies.class) {
- return this.isSupportedCopies((Copies)var1);
- } else if (var1.getCategory() == Destination.class) {
- URI var9 = ((Destination)var1).getURI();
- if ("file".equals(var9.getScheme()) && !var9.getSchemeSpecificPart().equals("")) {
- return true;
- } else {
- return false;
- }
- } else {
- if (var1.getCategory() == Media.class) {
- if (var1 instanceof MediaSizeName) {
- return this.isSupportedMedia((MediaSizeName)var1);
- }
-
- if (var1 instanceof MediaTray) {
- return this.isSupportedMediaTray((MediaTray)var1);
- }
- } else {
- if (var1.getCategory() == MediaPrintableArea.class) {
- return this.isSupportedMediaPrintableArea((MediaPrintableArea)var1);
- }
-
- if (var1.getCategory() == SunAlternateMedia.class) {
- Media var8 = ((SunAlternateMedia)var1).getMedia();
- return this.isAttributeValueSupported(var8, var2, var3);
- }
-
- if (var1.getCategory() == PageRanges.class) {
- if (var2 != null && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE)) {
- return false;
- }
- } else if (var1.getCategory() == SheetCollate.class) {
- int var5 = this.getPrinterCapabilities();
- if (((this.prnCaps & 4) == 0 || var2 != null) && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE)) {
- return false;
- }
- } else if (var1.getCategory() == Sides.class) {
- if (var2 != null && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE)) {
- return false;
- }
- } else if (var1.getCategory() == PrinterResolution.class) {
- if (var1 instanceof PrinterResolution) {
- return this.isSupportedResolution((PrinterResolution)var1);
- }
- } else if (var1.getCategory() == OrientationRequested.class) {
- if (var1 == OrientationRequested.REVERSE_PORTRAIT || var2 != null && !var2.equals(SERVICE_FORMATTED.PAGEABLE) && !var2.equals(SERVICE_FORMATTED.PRINTABLE) && !var2.equals(INPUT_STREAM.GIF) && !var2.equals(INPUT_STREAM.JPEG) && !var2.equals(INPUT_STREAM.PNG) && !var2.equals(BYTE_ARRAY.GIF) && !var2.equals(BYTE_ARRAY.JPEG) && !var2.equals(BYTE_ARRAY.PNG) && !var2.equals(URL.GIF) && !var2.equals(URL.JPEG) && !var2.equals(URL.PNG)) {
- return false;
- }
- } else if (var1.getCategory() == ColorSupported.class) {
- int var7 = this.getPrinterCapabilities();
- boolean var6 = (var7 & 1) != 0;
- if (!var6 && var1 == ColorSupported.SUPPORTED || var6 && var1 == ColorSupported.NOT_SUPPORTED) {
- return false;
- }
- }
- }
-
- return true;
- }
- }
- }
-
- public AttributeSet getUnsupportedAttributes(DocFlavor var1, AttributeSet var2) {
- if (var1 != null && !this.isDocFlavorSupported(var1)) {
- throw new IllegalArgumentException("flavor " + var1 + "is not supported");
- } else if (var2 == null) {
- return null;
- } else {
- HashAttributeSet var4 = new HashAttributeSet();
- Attribute[] var5 = var2.toArray();
-
- for(int var6 = 0; var6 < var5.length; ++var6) {
- try {
- Attribute var3 = var5[var6];
- if (!this.isAttributeCategorySupported(var3.getCategory())) {
- var4.add(var3);
- } else if (!this.isAttributeValueSupported(var3, var1, var2)) {
- var4.add(var3);
- }
- } catch (ClassCastException var8) {
- }
- }
-
- if (var4.isEmpty()) {
- return null;
- } else {
- return var4;
- }
- }
- }
-
- public ServiceUIFactory getServiceUIFactory() {
- return null;
- }
-
- public String toString() {
- return "Win32 Printer : " + this.getName();
- }
-
- public boolean equals(Object var1) {
- return var1 == this || var1 instanceof Win32PrintService && ((Win32PrintService)var1).getName().equals(this.getName());
- }
-
- public int hashCode() {
- return this.getClass().hashCode() + this.getName().hashCode();
- }
-
- public boolean usesClass(Class var1) {
- return var1 == WPrinterJob.class;
- }
-
- private native int[] getAllMediaIDs(String var1, String var2);
-
- private native int[] getAllMediaSizes(String var1, String var2);
-
- private native int[] getAllMediaTrays(String var1, String var2);
-
- private native float[] getMediaPrintableArea(String var1, int var2);
-
- private native String[] getAllMediaNames(String var1, String var2);
-
- private native String[] getAllMediaTrayNames(String var1, String var2);
-
- private native int getCopiesSupported(String var1, String var2);
-
- private native int[] getAllResolutions(String var1, String var2);
-
- private native int getCapabilities(String var1, String var2);
-
- private native int[] getDefaultSettings(String var1);
-
- private native int getJobStatus(String var1, int var2);
-
- private native String getPrinterPort(String var1);
-
- static {
- Class var0 = Win32MediaSize.class;
- supportedFlavors = new DocFlavor[]{BYTE_ARRAY.GIF, INPUT_STREAM.GIF, URL.GIF, BYTE_ARRAY.JPEG, INPUT_STREAM.JPEG, URL.JPEG, BYTE_ARRAY.PNG, INPUT_STREAM.PNG, URL.PNG, SERVICE_FORMATTED.PAGEABLE, SERVICE_FORMATTED.PRINTABLE, BYTE_ARRAY.AUTOSENSE, URL.AUTOSENSE, INPUT_STREAM.AUTOSENSE};
- serviceAttrCats = new Class[]{PrinterName.class, PrinterIsAcceptingJobs.class, QueuedJobCount.class, ColorSupported.class};
- otherAttrCats = new Class[]{JobName.class, RequestingUserName.class, Copies.class, Destination.class, OrientationRequested.class, PageRanges.class, Media.class, MediaPrintableArea.class, Fidelity.class, SheetCollate.class, SunAlternateMedia.class, Chromaticity.class};
- dmPaperToPrintService = new MediaSizeName[]{MediaSizeName.NA_LETTER, MediaSizeName.NA_LETTER, MediaSizeName.TABLOID, MediaSizeName.LEDGER, MediaSizeName.NA_LEGAL, MediaSizeName.INVOICE, MediaSizeName.EXECUTIVE, MediaSizeName.ISO_A3, MediaSizeName.ISO_A4, MediaSizeName.ISO_A4, MediaSizeName.ISO_A5, MediaSizeName.JIS_B4, MediaSizeName.JIS_B5, MediaSizeName.FOLIO, MediaSizeName.QUARTO, MediaSizeName.NA_10X14_ENVELOPE, MediaSizeName.B, MediaSizeName.NA_LETTER, MediaSizeName.NA_NUMBER_9_ENVELOPE, MediaSizeName.NA_NUMBER_10_ENVELOPE, MediaSizeName.NA_NUMBER_11_ENVELOPE, MediaSizeName.NA_NUMBER_12_ENVELOPE, MediaSizeName.NA_NUMBER_14_ENVELOPE, MediaSizeName.C, MediaSizeName.D, MediaSizeName.E, MediaSizeName.ISO_DESIGNATED_LONG, MediaSizeName.ISO_C5, MediaSizeName.ISO_C3, MediaSizeName.ISO_C4, MediaSizeName.ISO_C6, MediaSizeName.ITALY_ENVELOPE, MediaSizeName.ISO_B4, MediaSizeName.ISO_B5, MediaSizeName.ISO_B6, MediaSizeName.ITALY_ENVELOPE, MediaSizeName.MONARCH_ENVELOPE, MediaSizeName.PERSONAL_ENVELOPE, MediaSizeName.NA_10X15_ENVELOPE, MediaSizeName.NA_9X12_ENVELOPE, MediaSizeName.FOLIO, MediaSizeName.ISO_B4, MediaSizeName.JAPANESE_POSTCARD, MediaSizeName.NA_9X11_ENVELOPE};
- dmPaperBinToPrintService = new MediaTray[]{MediaTray.TOP, MediaTray.BOTTOM, MediaTray.MIDDLE, MediaTray.MANUAL, MediaTray.ENVELOPE, Win32MediaTray.ENVELOPE_MANUAL, Win32MediaTray.AUTO, Win32MediaTray.TRACTOR, Win32MediaTray.SMALL_FORMAT, Win32MediaTray.LARGE_FORMAT, MediaTray.LARGE_CAPACITY, null, null, MediaTray.MAIN, Win32MediaTray.FORMSOURCE};
- DM_PAPERSIZE = 2;
- DM_PRINTQUALITY = 1024;
- DM_YRESOLUTION = 8192;
- }
- }
-